package com.shop.service;

import java.util.List;

import com.shop.domain.Cart;
import com.shop.domain.Favorite;
import com.shop.domain.MessageCenter;
import com.shop.domain.Order;
import com.shop.domain.User;

/**
 * 
 * @author wenjuanhenxing
 * @version V1.0 UserService.java 2016-2-12 下午4:22:37
 */
public interface UserService {
	/**
	 * 判断用户名是否存在
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 用户名是否存在
	 */
	boolean usernameExists(String username);

	/**
	 * 判断用户名是否禁用
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 用户名是否禁用
	 */
	boolean usernameDisabled(String username);

	/**
	 * 判断E-mail是否存在
	 * 
	 * @param email
	 *            E-mail(忽略大小写)
	 * @return E-mail是否存在
	 */
	boolean emailExists(String email);

	/**
	 * 
	 * @param user
	 */
	boolean add(User user);

	/**
	 * 更新会员
	 * 
	 * @param user
	 */
	boolean update(User user);

	boolean updateRealName(User user);

	/**
	 * 根据用户名查找会员
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 会员，若不存在则返回null
	 */
	User findByUsername(String username);

	/**
	 * 根据E-mail查找会员
	 * 
	 * @param email
	 *            E-mail(忽略大小写)
	 * @return 会员，若不存在则返回null
	 */
	User findListByEmail(String email);

	/**
	 * 查找会员消费信息
	 * 
	 * @param beginDate
	 *            起始日期
	 * @param endDate
	 *            结束日期
	 * @param count
	 *            数量
	 * @return 会员消费信息
	 */
	// List<Object[]> findPurchaseList(Date beginDate, Date endDate, Integer
	// count);

	/**
	 * 判断会员是否已经登录
	 * 
	 * @return 会员是否登录
	 */
	boolean isLogin();

	/**
	 * 获取当前登录会员
	 * 
	 * @return 当前登录会员，若不存在则返回null
	 */
	User getCurrent();

	/**
	 * 获取当前登录用户名
	 * 
	 * @return 当前登录用户名，若不存在则返回null
	 */
	String getCurrentUsername();

	List<User> getAllUsers();

	User getUserById(Long id);

	User getUserByName(String username);

	boolean deleteUserById(Long id);

	boolean finishCertify(User user);

	List<Cart> getCarts(Long id);

	List<Favorite> getFavorites(Long id);

	List<MessageCenter> getReceiveMessages(Long id);

	List<MessageCenter> getSendMessages(Long id);

	List<Order> getBuyOrders(Long id);

	List<Order> getSaleyOrders(Long id);

	boolean updateCertifyStatus(User user);

}
